#include <REGX52.H>
#include <INTRINS.h>
#include "Delay.h"

sbit RCK = P3^5;  //RCLK  上升沿锁存
sbit SCK = P3^6;  //SRCLK 上升沿移位
sbit SER = P3^4;  //SER   串行数据
/**
  * @brief  74HC595写入一个字节 
  * @param  要写入的字节
  * @retval 0
  */

void _74HC595_WriteByte(unsigned char Byte)
{
   unsigned char i;
	 for(i = 0;i < 8; i++)
	 {
			SER = Byte&(0x80>>i);//取出每一位
			SCK = 1;
			SCK = 0;
	 }
	 RCK = 1;
	 RCK = 0;
	 
	 
	 
}
/**
  * @brief  LED点阵屏显示一列数据
  * @param  cloumn 要选择的列 0~7 0在最左边
* @Param  Data 要选择显示列的数据 高位在上 1为亮 0为灭
  * @retval 无
  */
void MatrixLED_showColumn(unsigned char Column,Data)
{
    _74HC595_WriteByte(Data);
	P0=~(0x80>>Column);//这里我们规定P07为第0列 也就是0x80
	Delay(1);
	//段选 位选 延时 位选清零 断选 位选 延时 位选清零 段选
	P0 = 0xFF;//位选清零

}

void main()
{
	  SCK = 0;//串行时钟初始化低电平 方便后面移位
	  RCK = 0;//寄存器时钟初始化低电平 方便后面移位
	  while(1)
		{
//	   		MatrixLED_showColumn(0,0x80); 对角线
//			  MatrixLED_showColumn(1,0x40);
//			  MatrixLED_showColumn(2,0x20);
//			  MatrixLED_showColumn(3,0x10);
//				MatrixLED_showColumn(4,0x08);
//			  MatrixLED_showColumn(5,0x04);
//			  MatrixLED_showColumn(6,0x02);
//			  MatrixLED_showColumn(7,0x01);
          MatrixLED_showColumn(0,0x3C); //笑脸
					MatrixLED_showColumn(1,0x42);
					MatrixLED_showColumn(2,0xA9);
					MatrixLED_showColumn(3,0x85);
					MatrixLED_showColumn(4,0x85);
					MatrixLED_showColumn(5,0xA9);
					MatrixLED_showColumn(6,0x42);
					MatrixLED_showColumn(7,0x3C);





		}

}